"""
O módulo utils_contato contém as principais funções para realizar as ações da angeda.
Com o módulo é possível listar os contatos, buscar por um contato específico ou remover um contato.
"""

import package as função

def listar_contatos(agenda):
    """
    A função 'exibir_contatos' é responsável por mostrar na tela a lista de contatos presentes na agenda
    """
    
    print("\n\033[1;36mLista de contatos:\033[0m")
    for nome, contato in agenda.items():
        print(f"Nome: {nome.title()}, Telefone: {contato['Telefone']}, E-mail: {contato['E-mail']}\n")

def buscar_contato(agenda, nome):
    """
    A função 'buscar_contato' verifica se o nome fornecido está presente na agenda
    e então realiza a busca por um contato específico parar imprimir as informações disponíveis
    """
    try:
        if nome in agenda:
            print("\n\033[1;36mBuscando contato...\033[0m")
            contato = agenda[nome]
            print(f"\nInformações do contato '{nome.title()}':")
            print(f"Telefone: {contato['Telefone']}")
            print(f"E-mail: {contato['E-mail']}\n")
    except KeyError:
        print(f"\nContato '{nome.title()}' não encontrado na agenda.\n")

def criar_contato(agenda, arquivo_agenda):
    """
    A função 'criar_contato' é responsável por armazenar os dados fornecidos pelo usuário em um dicionário
    Os dados após serem salvos são salvos no arquivo agenda e então são imprimidos
    """
    
    print("\n\033[1;36mCriando contato...\033[0m")

    nome = input("\nDigite o nome do contato: ")

    if nome.lower() in agenda:
        return print(f"\nO contato '{nome.title()}' já existe na agenda.\n")
    
    if len(nome) < 3 or nome == "": 
        return print("\nNome inválido.\nInsira um nome com pelo menos 3 caracteres.\n")    
    
    telefone = input("\nDigite o número do contato: ")
    
    if not telefone.isdigit():
        return print("\nTelefone inválido.\nInsira apenas números.\n")
    
    email = input("\nDigite o e-mail do contato: ")
    
    if len(email) < 0 or email == "":
        return print("\nE-mail inválido.\n")

    agenda[nome.lower()] = {'Telefone': telefone, 'E-mail': email.lower()}

    função.salvar_agenda(agenda, arquivo_agenda)

    print(f"\n\033[1;36mContato adicionado com sucesso!:\033[0m\n\tNome: {nome.title()}\n\tTelefone: {telefone}\n\tE-mail: {email.lower()}\n")

def remover_contato(agenda, nome):
    """
    A função 'remover_contato' deleta um contato com o nome recebido como argumento
    A função verifica se o nome está presente na agenda e então utiliza a instrução del para remover o contato
    """
    try:
        if nome in agenda:
            opção = input(f"\033[1;31mDeseja remover o usuário: {nome.title()} [S/n]? \033[0m")
            if opção.lower() == 's' or opção == "":
                print("\n\033[1;31mRemovendo Contato...\033[0m")
                del agenda[nome]
                print(f"Contato '{nome}' removido com sucesso!\n")
            elif opção.lower() == 'n':
                return print("\nOperação abortada.\n")
            else:
                return print("\nOpção inválida.\n")
    except KeyError:
        print(f"\nContato '{nome}' não encontrado na agenda.\n")


